Typical computing systems comprise input devices, output devices, one or more central processing units (e.g., CPUs), and storage capacity. The storage capacity may take form in many different types of data storage devices, such as semiconductor memory, magnetic disk drives, and optical drives. An operating system provides an application environment and a file system that allocates or de-allocates storage capacity as files are created, modified, or deleted. Data storage systems, such as data storage arrays, also employ a file system for allocating storage capacity that is accessed through a network or other connection. Servers and storage arrays are serviced by storage controllers that support data storage formats, such as a redundant array of independent drives (RAID), which distribute (e.g., “stripe”) stored information across a plurality of data storage devices.
One or more storage controllers typically manage the storage/retrieval of data files to/from one or more storage devices. As files are communicated through a storage controller, the storage controller must direct the data to/from the appropriate locations on the physical storage media. In some storage controllers, this requirement leads to complex caching and mapping constructs to make certain the right data is communicated to the right place. Data that describes the manner in which the data is mapped to cache memory within a storage controller and mapped to proper locations on physical storage media is termed “metadata”.
The structure of metadata can significantly impact storage system performance, particularly across different components in the storage system (e.g., host bus adapter (HBA), storage controller, and storage device). One existing implementation employs a scatter-gather list (SGL). For example, in a write operation, an SGL identifies memory buffers to which data is to be written (i.e., “scattered”), and in a read operation, an SGL identifies memory buffers from which memory is to be read (e.g., “gathered”). SGLs are commonly used in Direct Memory Address (DMA) reads and writes. However, simple SGLs are not optimized for use in a striped storage environment, thereby complicating the processing and slowing the performance of each transaction request.